﻿<html DIR="LTR" xmlns:tool="http://www.microsoft.com/tooltip" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ddue="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
  <head>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=utf-8" />
    <META NAME="save" CONTENT="history" />
    <title>Entendendo conversões de tipo de dados</title>
    
    <link rel="stylesheet" type="text/css" href="../local/Classic.css">
      
    </link>
    
    <script src="../local/script.js">
      
    </script><script src="../local/script_main.js">&amp;nbsp;</script>
  </head>
  <body>
    <!--Topic built:04/01/2010 05:03:30-->

    
    
    
    
    
    
    
    
    
    <div id="header">
      <table width="100%" id="topTable"><tr>
          <td align="left">
            <span id="headerBold">Entendendo conversões de tipo de dados</span>
          </td>
          <td align="right">
            
          </td>
        </tr></table>
      
      
      
    </div>
    <div id="mainSection">
      
        
        
    <font color="DarkGray">
      
    </font>
    <p />
    
    <p />
  
        <div id="introductionSection" class="section">
    <p>Para facilitar a conversão de tipos de dados da linguagem de programação Java para tipos de dados do SQL Server, o Microsoft SQL Server JDBC Driver fornece conversões de tipo de dados como é exigido pela especificação de JDBC. Para garantir flexibilidade, todos os tipos são conversíveis para e de tipos de dados <b>Object</b>, <b>String</b> e <b>byte[]</b>. </p>
  </div><h1 class="heading">Conversões de método getter</h1><div id="sectionSection0" class="section"><content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">
      <p xmlns="">Com base nos tipos de dados do SQL Server, o gráfico seguinte contém o mapa de conversão do driver JDBC para os métodos <b>get&lt;Type&gt;()</b> da classe <a href="eaffcff1-286c-459f-83da-3150778480c9.htm">SQLServerResultSet</a> e as conversões com suporte para os métodos <b>get&lt;Type&gt;</b> da classe <a href="30710a63-c05d-47d9-9cf9-c087a1c76373.htm">SQLServerCallableStatement</a>.</p>
      <div xmlns=""><img src="../local/a01384f7-3912-4a57-beca-eb876955c6f6.gif" target="_blank" alt="JDBCGetterConversions" /></div>
      <p xmlns="">Há três categorias de conversões que têm suporte pelos métodos getter do driver JDBC:</p>
      <ul xmlns=""><li>
          
            <b>Sem perda (x)</b>: as conversões para casos em que o tipo getter é o mesmo ou menor que o tipo de servidor subjacente. Por exemplo, ao chamar <b>getBigDecimal</b> em uma coluna decimal do servidor subjacente, nenhuma conversão é necessária.<br />
        </li><li>
          
            <b>Convertido (y)</b>: as conversões de tipos de servidores numéricos para tipos da linguagem Java em que a conversão é normal e segue as regras de conversão da linguagem Java. Para estas conversões, a precisão é sempre truncada — nunca arredondada — e o estouro é tratado como módulo do tipo de destino, que é menor. Por exemplo, chamar <b>getInt</b> em uma coluna <b>decimal</b> subjacente que contém "1.9999" retornará "1", ou se o valor <b>decimal</b> subjacente for "3000000000", o valor <b>int</b> estourará para "-1294967296."<br />
        </li><li>
          
            <b>Dependente de dados (z)</b>: as conversões de tipos de caracteres subjacentes para tipos numéricos exigem que os tipos de caracteres contenham valores que podem ser convertidos naquele tipo. Nenhuma outra conversão é realizada. Se o valor for muito grande para o tipo getter, o valor não será válido. Por exemplo, se <b>getInt</b> for chamado em uma coluna de varchar(50) que contém "53", o valor será retornado como um <b>int</b>; mas se o valor subjacente for "xyz" ou "3000000000", um erro será lançado.<br />
        </li></ul>
      <p xmlns="">Se <b>getString</b> for chamado em um tipo de dados de coluna <b>binary</b>, <b>varbinary</b>, <b>varbinary(max)</b> ou <b>image</b>, o valor será retornado como um valor hexadecimal da cadeia de caracteres.</p>
    </content></div><h1 class="heading">Conversões de método updater</h1><div id="sectionSection1" class="section"><content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">
      <p xmlns="">Para os dados de tipo Java passados para os métodos <b>update&lt;Type&gt;()</b> da classe <a href="eaffcff1-286c-459f-83da-3150778480c9.htm">SQLServerResultSet</a>, as conversões a seguir se aplicam.</p>
      <div xmlns=""><img src="../local/104cb32d-a90c-4bcb-97de-e6907a0efe99.gif" target="_blank" alt="JDBCUpdaterConversions" /></div>
      <p xmlns="">Há três categorias de conversões que têm suporte pelos métodos updater do driver JDBC:</p>
      <ul xmlns=""><li>
          
            <b>Sem perda (x)</b>: as conversões para casos em que o tipo updater é o mesmo ou menor que o tipo de servidor subjacente. Por exemplo, ao chamar <b>updateBigDecimal</b> em uma coluna decimal do servidor subjacente, nenhuma conversão é necessária.<br />
        </li><li>
          
            <b>Convertido (y)</b>: as conversões de tipos de servidores numéricos para tipos da linguagem Java em que a conversão é normal e segue as regras de conversão da linguagem Java. Para estas conversões, a precisão é sempre truncada (nunca arredondada) e o estouro é tratado como módulo do tipo de destino (menor). Por exemplo, chamar <b>updateDecimal</b> em uma coluna <b>int</b> subjacente que contém "1.9999" retornará "1", ou se o valor <b>decimal</b> subjacente for "3000000000", o valor <b>int</b> estourará para "-1294967296."<br />
        </li><li>
          
            <b>Dependente de dados (z)</b>: as conversões de tipos de dados de origem subjacentes para tipos de dados de destino exigem que os valores contidos sejam convertidos em tipos de destino. Nenhuma outra conversão é realizada. Se o valor for muito grande para o tipo getter, o valor não será válido. Por exemplo, se <b>updateString</b> for chamado em uma coluna int que contenha "53", a atualização será bem-sucedida; mas se o valor subjacente de String for "foo" ou "3000000000", um erro será lançado.<br />
        </li></ul>
      <p xmlns="">Quando <b>updateString</b> é chamado em um tipo de dados de coluna <b>binary</b>, <b>varbinary</b>, <b>varbinary(max)</b> ou <b>image</b>, ele trata o valor de String como um valor hexadecimal da cadeia de caracteres.</p>
      <p xmlns="">Quando o tipo de dados de coluna do SQL Server for <b>XML</b>, o valor de dados deverá ser um <b>XML</b> válido. Ao chamar os métodos <b>updateBytes</b>, <b>updateBinaryStream</b> ou <b>updateBlob</b>, o valor de dados deverá ser a representação de cadeia de caracteres hexadecimal dos caracteres XML. Por exemplo: </p>
      <div class="sampleCode" xmlns=""><span codeLanguage="other"><pre>&lt;hello&gt;world&lt;/hello&gt; = 0x3C68656C6C6F3E776F726C643C2F68656C6C6F3E </pre></span></div>
      <p xmlns="">Observe que uma marca de ordem de byte (BOM) é exigida se os caracteres XML estiverem em codificações de caracteres específicas.</p>
    </content></div><h1 class="heading">Conversões de método setter</h1><div id="sectionSection2" class="section"><content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">
      <p xmlns="">Para os dados de tipo Java passados para os métodos <b>set&lt;Type&gt;()</b> da classe <a href="a8481c06-fbba-432b-8c69-4f4619c20ad4.htm">SQLServerPreparedStatement</a> e da classe <a href="30710a63-c05d-47d9-9cf9-c087a1c76373.htm">SQLServerCallableStatement</a>, as conversões a seguir se aplicam.</p>
      <div xmlns=""><img src="../local/fe289363-9e70-4c8d-88bc-51e959ed9755.gif" target="_blank" alt="JDBCSetterConversions" /></div>
      <p xmlns="">O servidor experimenta qualquer conversão e retorna erros quando há falha.</p>
      <p xmlns="">No caso do tipo de dados <b>String</b>, se o valor exceder o comprimento de <b>VARCHAR</b>, ele mapeará para <b>LONGVARCHAR</b>. Da mesma forma, <b>NVARCHAR</b> mapeará para <b>LONGNVARCHAR</b> se o valor exceder o comprimento do <b>NVARCHAR</b> que tem suporte. O mesmo é válido para <b>byte[]</b>. Valores mais longos que <b>VARBINARY</b> tornam-se <b>LONGVARBINARY</b>.</p>
      <p xmlns="">Há duas categorias de conversões que têm suporte pelos métodos setter do driver JDBC:</p>
      <ul xmlns=""><li>
          
            <b>Sem perda (x)</b>: as conversões para casos numéricos em que o tipo setter é o mesmo ou menor que o tipo de servidor subjacente. Por exemplo, ao chamar <b>setBigDecimal</b> em uma coluna <b>decimal</b> do servidor subjacente, nenhuma conversão é necessária. Para casos de numérico para caractere, o tipo de dados Java <b>numeric</b> é convertido para uma <b>String</b>. Por exemplo, chamar <b>setDouble</b> com um valor de "53" em uma coluna de varchar (50) gera um valor de caractere "53" na coluna de destino.<br />
        </li><li>
          
            <b>Convertido (y)</b>: conversões de um tipo Java <b>numeric</b> para um tipo <b>numeric</b> de servidor subjacente que é menor. Esta conversão é normal e segue as convenções de conversão do SQL Server. A precisão sempre é truncada (nunca arredondada) e o estouro lança um erro de conversão sem suporte. Por exemplo, usar <b>updateDecimal</b> com um valor de "1.9999" em uma coluna de inteiro subjacente resulta em um "1" na coluna de destino; mas se for passado "3000000000", o driver lançará um erro.<br />
        </li><li>
          
            <b>Dependente de dados (z)</b>: conversões de um tipo Java <b>String</b> para o tipo de dados subjacente do SQL Server dependem das seguintes condições: o driver envia o valor de <b>String</b> para o SQL Server e o SQL Server realiza as conversões, se necessário. Se <b>sendStringParametersAsUnicode</b> for definido como true e o tipo de dados adjacente do SQL Server for <b>image</b>, o SQL Server não permitirá a conversão de <b>nvarchar</b> em <b>image</b> e lançará um <b>SQLServerException</b>. Se sendStringParametersAsUnicode for definido como false e o tipo de dados adjacente do SQL Server for <b>image</b>, o SQL Server permitirá a conversão de <b>varchar</b> em <b>image</b> e não emitirá uma exceção.<br />
        </li></ul>
      <p xmlns="">
        O SQL Server realiza as conversões e passa os erros de volta para o driver JDBC quando há problemas.</p>
      <p xmlns="">Quando o tipo de dados de coluna do SQL Server for <b>XML</b>, o valor de dados deverá ser um <b>XML</b> válido. Ao chamar os métodos <b>updateBytes</b>, <b>updateBinaryStream</b> ou <b>updateBlob</b>, o valor de dados deverá ser a representação de cadeia de caracteres hexadecimal dos caracteres XML. Por exemplo: </p>
      <div class="sampleCode" xmlns=""><span codeLanguage="other"><pre>&lt;hello&gt;world&lt;/hello&gt; = 0x3C68656C6C6F3E776F726C643C2F68656C6C6F3E </pre></span></div>
      <p xmlns="">Observe que uma marca de ordem de byte (BOM) é exigida se os caracteres XML estiverem em codificações de caracteres específicas.</p>
    </content></div><h1 class="heading">Conversões em setObject</h1><div id="sectionSection3" class="section"><content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">
      <p xmlns="">Para os dados de tipo Java passados para os métodos <b>setObject(&lt;Type&gt;)</b> da classe <a href="a8481c06-fbba-432b-8c69-4f4619c20ad4.htm">SQLServerPreparedStatement</a>, as conversões a seguir se aplicam. </p>
      <div xmlns=""><img src="../local/92cdf5f9-afdf-4a92-b1ea-204a7d93b8a5.gif" target="_blank" alt="JDBCSetObjectConversions" /></div>
      <p xmlns="">O método <b>setObject</b> sem tipo designado especificado usa o mapeamento padrão. No caso do tipo de dados <b>String</b>, se o valor exceder o comprimento de <b>VARCHAR</b>, ele mapeará para <b>LONGVARCHAR</b>. Da mesma forma, <b>NVARCHAR</b> mapeará para <b>LONGNVARCHAR</b> se o valor exceder o comprimento do <b>NVARCHAR</b> que tem suporte. O mesmo é válido para <b>byte[]</b>. Valores mais longos que <b>VARBINARY</b> tornam-se <b>LONGVARBINARY</b>.</p>
      <p xmlns="">Há três categorias de conversões que têm suporte pelos métodos setObject do driver JDBC:</p>
      <ul xmlns=""><li>
          
            <b>Sem perda (x)</b>: as conversões para casos numéricos em que o tipo setter é o mesmo ou menor que o tipo de servidor subjacente. Por exemplo, ao chamar <b>setBigDecimal</b> em uma coluna <b>decimal</b> do servidor subjacente, nenhuma conversão é necessária. Para casos de numérico para caractere, o tipo de dados Java <b>numeric</b> é convertido para uma <b>String</b>. Por exemplo, chamar <b>setDouble</b> com um valor de "53" em uma coluna de varchar (50) gerará um valor de caractere "53" na coluna de destino.<br />
        </li><li>
          
            <b>Convertido (y)</b>: conversões de um tipo Java <b>numeric</b> para um tipo <b>numeric</b> de servidor subjacente que é menor. Esta conversão é normal e segue as convenções de conversão do SQL Server. A precisão sempre é truncada — nunca arredondada — e o estouro lança um erro de conversão sem suporte. Por exemplo, usar <b>updateDecimal</b> com um valor de "1.9999" em uma coluna de inteiro subjacente resulta em um "1" na coluna de destino; mas se for passado "3000000000", o driver lançará um erro.<br />
        </li><li>
          
            <b>Dependente de dados (z)</b>: conversões de um tipo Java <b>String</b> para o tipo de dados subjacente do SQL Server dependem das seguintes condições: o driver envia o valor de <b>String</b> para o SQL Server e o SQL Server realiza as conversões, se necessário. Se <b>sendStringParametersAsUnicode</b> for definido como true e o tipo de dados adjacente do SQL Server for <b>image</b>, o SQL Server não permitirá a conversão de <b>nvarchar</b> em <b>image</b> e emitirá um SQLServerException. Se <b>sendStringParametersAsUnicode</b> for definido como false e o tipo de dados adjacente do SQL Server for <b>image</b>, o SQL Server não permitirá a conversão de <b>varchar</b> em <b>image</b> e não emitirá uma exceção.<br />
        </li></ul>
      <p xmlns="">
        O SQL Server realiza o conjunto de conversões em massa e passa os erros de volta para o driver JDBC quando há problemas. As conversões do lado do cliente são a exceção e são realizadas somente no caso de valores <b>date</b>, <b>time</b>, <b>timestamp</b>, <b>Boolean</b> e <b>String</b>.</p>
      <p xmlns="">Quando o tipo de dados de coluna do SQL Server for <b>XML</b>, o valor de dados deverá ser um <b>XML</b> válido. Ao chamar os métodos setObject (byte [], SQLXML), setObject (inputStream, SQLXML) ou setObject (Blob, SQLXML), o valor de dados deverá ser a representação hexadecimal da cadeia dos caracteres XML. Por exemplo: </p>
      <div class="sampleCode" xmlns=""><span codeLanguage="other"><pre>&lt;hello&gt;world&lt;/hello&gt; = 0x3C68656C6C6F3E776F726C643C2F68656C6C6F3E </pre></span></div>
      <p xmlns="">Observe que uma marca de ordem de byte (BOM) é exigida se os caracteres XML estiverem em codificações de caracteres específicas.</p>
    </content></div><span id="seeAlsoSpan"><h1 class="heading">Consulte também</h1></span><div id="seeAlsoSection" class="section" name="collapseableSection"><a href="7802328d-4d23-4775-9573-4169b127d258.htm">Entendendo os tipos de dados do JDBC Driver</a><br /><br /></div><!--[if gte IE 5]>
			<tool:tip element="seeAlsoToolTip" avoidmouse="false"/><tool:tip element="languageFilterToolTip" avoidmouse="false"/><tool:tip element="roleInfoSpan" avoidmouse="false"/>
		<![endif]-->
      <div id="footer" class="section">
        
		<hr />
		
		<span id="fb" class="feedbackcss">
			
			
		</span>
		
		<a href="9bad553b-9e70-4696-8499-2e35f772a1e0.htm">
			
			© 2010 Microsoft Corporation. Todos os direitos reservados.
		</a>
 	
	
      </div>
    </div>
  </body>
</html>